#ifndef _RAY_H_
#define _RAY_H_

#include "Maths.h"
#include "Vector.h"

namespace Math{

/**
 * Classe de Rayon.
 *
 * Les rayons sont la chair du raytracer, ils sont composés d'une position
 * et d'une orientation.
 */
class MATH_API Ray{
 public:
    /**
     * Construit un Rayon nul
     */
    Ray();

    /**
     * Constructeur de Rayon
     * @param position la position de départ
     * @param direction le vecteur de direction, 
                        sera normalisé s'il ne l'est pas déjà
     */
    Ray(const Vector position,Vector direction);

	/**
	* Change la position du rayon
	* @param v La nouvelle position
	*/
	INLINED void setPosition(const Vector &v);

	/**
	* Change la direction du rayon
	* @param v La nouvelle direction
	*/
	INLINED void setDirection(const Vector &v);

    /**
     * Retourne la position de depart du rayon
     * @return la position du rayon
     */
    INLINED Vector& getPosition() const;

    /**
     * Retourne la direction du rayon
     * @return la direction du rayon
     */
    INLINED Vector& getDirection() const;
 private:
    
    Vector m_Position;		///< Vecteur de départ
    Vector m_Direction;		///< Vecteur de direction, normalisé
};

} // namespace Math

#endif
